; unsigned int calcular_cant_codigos(codigo_t *tabla_codigos);

%include "macros/personalizada.mac"
%include "macros/codigo_t.mac"

global calcular_cant_codigos

%define ptr_tabla_codigos [ebp + 8]

section .text

calcular_cant_codigos:
	push ebp
	mov ebp, esp
	push esi
	push edi
	push ebx
	
	xor eax, eax ; eax = contador de validas.
	mov esi, ptr_tabla_codigos ; esi = puntero a la tabla de codigos.
	cmp esi, 0 ; verificamos que no sea puntero a NULL.
	je fin
	
	mov ecx, 256 ; ecx = cantidad de elementos en la tabla de codigos.
	
ciclo:
	mov edx, ecx
	shl edx, 4 ; edx = ecx * 16 (indice dentro de la tabla).
	lea ebx, [esi + edx - 16] ; ebx = direccion del codigo actual.
	mov edi, [ebx + off_valido_cod] ; edi = validez del codigo actual.
	cmp edi, invalido ; verificamos la validez del codigo.
	je no_incrementar_contador
	inc eax
	
no_incrementar_contador:
	loop ciclo
	
fin:
	pop ebx
	pop edi
	pop esi
	pop ebp
	ret
